/**
 * @file tsk_tskp_config.h
 * @brief tskp库 - 配置参数头文件
 * @details
 * 本文件定义了tskp任务调参库的所有配置参数，包括任务数、优先级、队列长度、调试开关、命令支持、协议格式等。
 * 用户可根据实际需求修改本文件中的宏定义，以适配不同的嵌入式或实时系统场景。
 * 
 * 重要说明：
 *   - 库函数开关、调试开关、命令支持等参数需根据实际需求设置，部分功能需将对应宏定义为1方可生效。
 *   - 移植本库时请优先检查和调整本文件内容。
 *
 * 作者：小傲（个人开发）
 * 邮箱：2655640770@qq.com
 * 版权声明：开源公开，欢迎建议与反馈
 * 日期：2025-09-11
 */

#ifndef _TSK_TSKP_CONFIG_H_
#define _TSK_TSKP_CONFIG_H_

#if 1

#define _TSK_TSKP_

//配置参数
#define TSK_MAX_DATALEN  4                  //最大数据长度

#define TSK_MAX_PRIORITY_LEVELS     4       //最大优先级数
#define TSK_MAX_TASKS               8       //最大任务数,范围0~255
#define TSK_MAX_TASKS_PER_QUEUE     32      //每个优先级队列的最大任务数
#define TSK_TASK_ID_BITMAP_SIZE     (int)((TSK_MAX_TASKS+31)/ (sizeof(uint32_t) * 8)) // 位图大小

//单次调度器最大处理任务数,防止饥饿
#define TSK_ONE_MAX_TASKSCHEDULER   1      //单次调度器最大处理任务数

//解析队列和缓存大小
#define TSK_ANALY_QUEUE_MAXLEN      128-1   //解析队列最大长度
#define TSK_ANALY_CACHE_MAXLEN      128-1   //解析缓存最大长度

/*需要使用printf等函数时定义,否则不定义
注意:printf等函数会增加运行时间和内存使用,
用于控制是否打印调试信息,大量打印会加大运行时间
改成1表示打开调试,0表示关闭调试
*/
#define TSK_TASK_DEBUG              1       //任务调试开关

//中文支持开关,打开后可以打印中文,不使用中文输出英文
#if TSK_TASK_DEBUG
    #if 1
        #define CHINESE_SUPPORT 1
    #else
        #define CHINESE_SUPPORT 0
    #endif 
#endif

/*
用于控制是否使用命令,大量的命令会加大运行时间和内存使用,因此支持不使用
改成1表示使用命令,0表示不使用命令
!!! 重要：如需使用命令功能，请将此项设置为1 !!!
*/
#define TSK_CMD_SWITCH              0

//命令存储配置
#if TSK_CMD_SWITCH

#define TSK_MAX_STRING_LEN  8    // 最大字符串长度
#define TSK_MAX_TOTAL_NODES 2    // 最大节点数 (总命令数)
#define TSK_HASH_TABLE_SIZE 2    // 哈希表大小 (桶数量)

#endif

//动态批处理相关参数
// 水位线设置
#define TSK_HIGH_WATERMARK      (TSK_ANALY_QUEUE_MAXLEN * 0.7f)  // 高水位线
#define TSK_LOW_WATERMARK       (TSK_ANALY_QUEUE_MAXLEN * 0.3f)  // 低水位线
#define TSK_CRITICAL_WATERMARK  (TSK_ANALY_QUEUE_MAXLEN * 0.9f)  // 临界水位线
// 动态批处理参数
#define TSK_MIN_BATCH_SIZE          1       // 最小批处理大小
#define TSK_MAX_BATCH_SIZE          32      // 最大批处理大小
#define TSK_MAX_NORMAL_QUEUE_LEN    16      // 正常队列长度阈值

//数据帧协议
#define TSK_DATA_HEAD       "AT"            //数据头
#define TSK_DATA_TAIL       "\r\n"          //数据尾
#define TSK_ID_SPLIT        ';'             //id分隔符           

#endif

#endif // !_TSK_TSKP_CONFIG_H_
